#include <stdio.h>
#include <unistd.h>
#include <sys/select.h>

//select的非阻塞监控
int main()
{
    fd_set readfds;
    FD_ZERO(&readfds);

    //FD_SET(0, &readfds); 将这个放到循环里面

    //timeout的类型是一个timeval结构体
    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 0;

    while(1)
    {
        FD_SET(0, &readfds);

        int ret = select(0 + 1, &readfds, NULL, NULL, &tv); // 0表示非阻塞，但是不能直接写0，需要传结构体的地址，结构体中的tv_sec=0,tv_usec=0.
        if(ret < 0)
        {
            perror("select");
            return 0;
        }
        else if(ret == 0)
        {
            printf("select timeout\n");
            sleep(1);
            continue; //监控超时了，继续监控
        }

        //走到下面说明就监控成功了
        char buf[1024] = {0};
        read(0, buf, sizeof(buf) - 1);
        printf("buf is : %s\n", buf);
    }

    return 0;
}
